<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>33.使用代理Proxy控制函数</title>
</head>

<body>
  <script>
    //如果代理以函数方式执行时，会执行代理中定义 apply 方法。

    //- 参数说明：函数，上下文对象，参数

    //下面使用 apply 计算函数执行时间
    function factorial (num) {
      return num == 1 ? 1 : num * factorial(num - 1);
    }

    let proxy  = new Proxy(factorial, {
      apply(func,obj,args){
        console.time('run');
        func.apply(obj,args);
        console.log(func,obj,args);//  factorial,window,[1,2,3]
        console.timeEnd('run');
      }
    });
    proxy.apply(this, [1, 2, 3]);
  </script>
</body>

</html>